/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sn.service;

import java.io.File;
import java.io.InputStream;
import java.util.List;
import sn.metier.Fichier;
import sn.metier.Partage;
import sn.metier.Personne;

/**
 *
 * @author chenry08
 */
public interface PartageService {
	
	/**
	 * Permet de voir le mur d'un personne (le sien y compris)
	 * @param id identifiant de la personne dont on veux voir le mur
	 * @param idUtil identifiant de la personne voulant consulter le mur 
	 * @return la liste des partages de la personne
	 */
	public List<Partage> voirMur(Long id, Long idUtil);

        /**
         * Permet de voir son mur personnel, avec toutes ses publications, les partages publics de ses amis ou dont il est le destinataire
         * @param id identifiant de la personne
         * @return la liste des paratages apparraissant sur le mur personnel de la personne
         */
        public List<Partage> voirMurPerso(Long id);

        /**
         * Permet de partager publiquement un fichier
         * @param idpers identifiant de l'auteur
         * @param message un message publique
         * @param nomFichier nom du fichier partagé
         * @param typeFichier type du fichier partagé
         * @param tailleFichier taille du fichier partagé
         * @return le partage
         */
        public Partage partagerFichierPublic(Long idpers, String message, String nomOriginalFichier, String nomFichier, String typeFichier, Long tailleFichier);

        /**
         * Permet de partager un fichier avec une personne
         * @param idpers identifiant de l'auteur
         * @param message un message privé
         * @param iddest identifiant du destinataire
         * @param nomFichier nom du fichier partagé
         * @param typeFichier type du fichier partagé
         * @param tailleFichier taille du fichier partagé
         * @return le partage
         */
        //public Partage partagerFichierPrive(Long idpers, String message, Long iddest, String nomFichier, String typeFichier, Integer tailleFichier);
	
        /**
         * Permet de partager un fichier avec une liste d'amis
         * @param idpers identifiant de l'auteur
         * @param message un message pour des amis
         * @param liste liste d'amis destinataires de l'auteur
         * @param nomFichier nom du fichier partagé
         * @param typeFichier type du fichier partagé
         * @param tailleFichier taille du fichier partagé
         * @return le partage
         */
        public Partage partagerFichierAmis(Long idpers, String message, List<Long>liste, String nomOriginalFichier, String nomFichier, String typeFichier, Long tailleFichier);

        /**
         * Permet de sauvegarder un fichier uploadé
         * @param is le flux d'entrée du fichier
         * @return le File correspondant
         */
        public File sauvegardeFichier(InputStream is);
        
        
        /**
         * Récupère le flux d'octet d'un fichier à partir de son id, dans le répertoire d'upload
         * @param fileName
         * @return 
         */
        public InputStream chargerFluxFichier(Long id);
        
        /**
         * Récupère le type d'un fichier à partir de son id
         * @param id
         * @return 
         */
        public Fichier chargerFichier(Long id);

        /**
         * Supprimer un partage
         * @param idUtilisateur l'identifiant de l'auteur du partage
         * @param idPartage l'identifiant du partage
         */
        public void supprimerPartage(Long idUtilisateur, Long idPartage);
        
}
